#ifndef EVENTS_H
#define EVENTS_H

#include <event/eventhandler.h>

#include <string>

namespace events {

  const char * const ENDTHREAD_EVENT = "ENDTHREAD_EVENT";
  class EndThread : public Event
  {
  public:

    // EndThread ///////////////////////////////////////////
    //   EndThread( queue_flags );
    EndThread(unsigned long queue);

  private:
  };

  const char * const PRINTCONSOLE_EVENT = "PRINTCONSOLE_EVENT";
  class PrintConsole : public Event
  {
  public:

    // PrintConsole ///////////////////////////////////////////
    //   PrintConsole( message );
    PrintConsole(std::string message);
    const std::string & getMessage();
    Event * copy() const;

  private:
    std::string _message;
  };

  const char * const LOADRESOURCE_EVENT = "LOADRESOURCE_EVENT";
  class LoadResource : public Event {
  public:

    // LoadResource ///////////////////////////////////////////
    //   LoadResource( type, filename );
    LoadResource(unsigned long type, std::string filename);
    const std::string & getFilename() const;
    unsigned long getFileType() const;
    Event * copy() const;

  private:
    std::string _filename;
    unsigned long _typey;
  }; 

  const char * const REPORTRESOURCEID_EVENT = "REPORTRESOURCEID_EVENT";
  class ReportResourceID : public Event {
    public:

    // ReportResourceID ///////////////////////////////////////////
    //   ReportResourceID( index );
    ReportResourceID(long index);
    long getIndex() const;
    Event * copy() const;

  private:
    long _index;
  }; 

  const char * const REGISTERINPUT_EVENT = "REGISTERINPUT_EVENT";
  class RegisterInput : public Event {
    public:

    // RegisterInput ///////////////////////////////////////////
    //   RegisterInput( input_event, event );
    //   event pointer is cleaned up elsewhere
    RegisterInput(unsigned long input, Event * event);
    ~RegisterInput();
    unsigned long getInput() const;
    Event * getEvent() const;
    Event * copy() const;

  private:
    Event * _event;
    unsigned long _input;
  }; 

}; //end namespace events

#endif
